/*
 * Copyright (c) 2008-2017 浩瀚深度 All Rights Reserved.
 *
 * FileName: JsonMsgRequestType.java
 *
 * Description：
 *
 * History:
 * v1.0.0, zmw, 2017年8月10日, Create
 */
package com.monitor.config.zmq;

/**
 * 请求类型
 *
 * @author zmw
 * @version 1.0.0
 * @since 1.0.0
 */
public enum JsonMsgRequestType {
    /**
     * 业务资源编码
     */
    SERVICE("业务资源", 1),
    /**
     * 特征资源编码
     */
    PATTERN("特征资源", 2),
    /**
     * 流控用户资源编码
     */
    FLOWUSER("流控用户资源", 3),
    /**
     * 流控用户群资源编码
     */
    FLOWUSEGRP("流控用户群资源", 4),
    /**
     * 流控流向资源编码
     */
    FLOWNET("流控流向资源", 5),
    /**
     * 业务流控策略编码
     */
    SVCCTRL("业务流控策略", 6),
    /**
     * 白名单策略编码
     */
    GUARANTEE("白名单策略", 7),
    /**
     * 用户业务流控策略编码
     */
    USERSVCCTRL("用户业务流控策略", 8),
    /**
     * 用户群业务流控策略编码
     */
    USERGRPSVCCTRL("用户群业务流控策略", 9),
    /**
     * 流向业务流控策略编码
     */
    NETSVCTRL("流向业务流控策略", 10),
    /**
     * 多元流控策略编码
     */
    MTUPLECTRL("多元流控策略", 11),
    /**
     * 设备通用信息编码 电信IDC
     */
    COMMDEVICEINFO("设备通用信息", 12),
    /**
     * 文件加载编码
     */
    FILELOAD("文件资源加载", 13),
    /**
     * 流控区域编码，多级管控
     */
    FLOWZONE("流控区域", 14),
    /**
     * 策略规则，多级管控
     */
    POLICYRULE("策略规则", 15),
    /**
     * 策略绑定编码，多级管控
     */
    POLICYBIND("策略绑定", 16),
    /**
     * 策略清空编码，多级管控
     */
    POLICYCLEAR("多级策略清空", 17),
    /**
     * 策略同步编码，多级管控
     */
    SYNC("同步", 18),
    /**
     * 链路流量监控策略编码，HDS
     */
    POLICYDETECTLINK("链路流量监控策略", 19),
    /**
     * 一拖N策略编码，HDS
     */
    ONLINEACCOUNTCTRLPOLICY("一拖N封堵和告警策略", 20),
    /**
     * 一拖N账号关联编码，HDS
     */
    MULTIHOSTCTRLRELATEACCOUNTS("一拖N策略与账号关联", 21),
    /**
     * 一拖N关键字编码，HDS
     */
    SADKEYWORDAPP("1拖n关键字(app)", 22),
    /**
     * 一拖N Host编码，HDS
     */
    SADKEYWORDHOST("1拖n关键字(host)", 23),
    /**
     * URL封堵编码
     */
    URLBLOCK("URL封堵策略", 25),

    /**
     * 流量统计，业务流量统计
     */
    STATIS_SERVICE("业务流量统计", 100),
    /**
     * 流量统计，业务特征流量统计
     */
    STATIS_SERVICE_PATTERN("业务特征流量统计", 3030126),
    /**
     * 流量统计，业务特征连接流量统计
     */
    STATIS_SERVICE_PATTERN_CONN("业务特征连接流量统计", 3030127),
    /**
     * 数量统计，并发连接数统计
     */
    STATIS_CURR_SESSIONS("并发连接数统计", 3030128),
    /**
     * 流量统计，用户流量统计
     */
    STATIS_USER_SERVICE("用户流量统计", 101),
    /**
     * 流量统计，用户流向流量统计
     */
    STATIS_USER_NET_SERVICE("用户流向流量统计", 102),
    /**
     * 流量统计，用户群流量统计
     */
    STATIS_USERGRP_SERVICE("用户群流量统计", 103),
    /**
     * 流量统计，用户流向流量统计
     */
    STATIS_USERGRP_NET_SERVICE("用户群流向流量统计", 104),
    /**
     * 流量统计，流向流量统计
     */
    STATIS_NET_SERVICE("流向流量统计", 105),
    /**
     * 流量统计，白名单流量统计
     */
    STATIS_GUARANTEE("白名单流量统计", 106),
    /**
     * 流量统计，用户业务流控流量统计/用户流控流量统计
     */
    STATIS_CTRL_USER_SERVICE("用户业务流控流量统计/用户流控流量统计", 107),
    /**
     * 流量统计，用户群业务流控流量统计
     */
    STATIS_CTRL_USERGRP_SERVICE("用户群业务流控流量统计", 108),
    /**
     * 流量统计，流向业务流控流量统计
     */
    STATIS_CTRL_NET_SERVICE("流向业务流控流量统计", 109),
    /**
     * 流量统计，多元策略流量统计
     */
    STATIS_CTRL_MTUPLE("多元策略流量统计", 110),
    /**
     * 流量统计，URL策略流量统计
     */
    STATIS_CTRL_URL("URL策略流量统计", 111),
    /**
     * 流量统计，全局流量
     */
    STATIS_GLOBAL("全局流量统计", 112),
    /**
     * 流量统计，全局报文流量
     */
    STATIS_GLOBAL_PKT("全局报文流量统计", 113),
    /**
     * 流量统计，TOS流量统计
     */
    STATIS_TOS("TOS流量统计", 114),
    /**
     * 流量统计，IP协议流量统计
     */
    STATIS_PROTOCOL("IP协议流量统计", 115),
    /**
     * 流量统计，ICMP流量统计
     */
    STATIS_ICMP("ICMP流量统计", 116),
    /**
     * 流量统计，TCP FLAG流量统计
     */
    STATIS_TCPFLAG("TCP FLAG流量统计", 117),
    /**
     * 流量统计，MPLS-EXP流量统计
     */
    STATIS_MPLSEXP("MPLS-EXP流量统计", 118),
    /**
     * 流量统计，VPN封装流量统计
     */
    STATIS_VPN("VPN封装流量统计", 119),
    /**
     * 流量统计，报文长度分布统计
     */
    STATIS_PKTLEN("报文长度分布统计", 120),
    /**
     * 流量统计，链路流量统计
     */
    STATIS_LINK("链路流量统计", 121),
    /**
     * 流量统计，用户群策略流量统计
     */
    STATIS_CTRL_USERGRP("用户群策略流量统计", 122),
    /**
     * 流量统计，流向策略流量统计
     */
    STATIS_CTRL_NET("流向策略流量统计", 123),
    /**
     * 流量统计，小类业务封装流量统计
     */
    STATIS_CTRL_SVCENCAP("小类业务封装流量统计", 124),
    /**
     * 流量统计，业务策略流量统计
     */
    STATIS_CTRL_SERVICE("业务策略流量统计", 125),
    /**
     * 审计通用信息编码， IDC
     */
    ISMSCOMMONDEVICEINFO("ISMS通用信息", 1001),
    /**
     * 流量结果上报编码， IDC
     */
    ISMSFLOWRPT("ISMS流量结果上报策略", 1002),
    /**
     * 访问日志管理编码， IDC
     */
    ISMSACCESSLOGMGR("ISMS访问日志管理策略", 1003),
    /**
     * 机房与IP地址对应资源编码， IDC
     */
    ISMSHOUSE2IPLIST("ISMS机房与IP地址对应", 1004),
    /**
     * 信安管理策略编码， IDC
     */
    ISMSPOLICY("ISMS信息安全管理策略", 1005),
    /**
     * DPI流量镜像编码， IDC
     */
    DPIFLOWMIRPOLICY("DPI流量镜像策略", 1500),
    /**
     * 未知
     */
    UNKNOWN("未知", 999);
    /**
     * 消息类型名称
     */
    private String typeName;
    /**
     * 消息类型
     */
    private Integer type;

    /**
     * @param typeName 消息类型名称
     * @param type     消息类型
     */
    private JsonMsgRequestType(String typeName, Integer type) {
        this.typeName = typeName;
        this.type = type;
    }

    /**
     * @return the typeName
     */
    public String getTypeName() {
        return typeName;
    }

    /**
     * @return the type
     */
    public Integer getType() {
        return type;
    }

    /**
     * 获取应答码的type
     *
     * @param type 应答码
     * @return JsonMsgRequestType
     */
    public static JsonMsgRequestType obtainEnum(Integer type) {
        if (type == null) {
            return UNKNOWN;
        }
        switch (type) {
            case 1:
                return SERVICE;
            case 2:
                return PATTERN;
            case 3:
                return FLOWUSER;
            case 4:
                return FLOWUSEGRP;
            case 5:
                return FLOWNET;
            case 6:
                return SVCCTRL;
            case 7:
                return GUARANTEE;
            case 8:
                return USERSVCCTRL;
            case 9:
                return USERGRPSVCCTRL;
            case 10:
                return NETSVCTRL;
            case 11:
                return MTUPLECTRL;
            case 12:
                return COMMDEVICEINFO;
            case 13:
                return FILELOAD;
            case 14:
                return FLOWZONE;
            case 15:
                return POLICYRULE;
            case 16:
                return POLICYBIND;
            case 17:
                return POLICYCLEAR;
            case 18:
                return SYNC;
            case 19:
                return POLICYDETECTLINK;
            case 20:
                return ONLINEACCOUNTCTRLPOLICY;
            case 21:
                return MULTIHOSTCTRLRELATEACCOUNTS;
            case 22:
                return SADKEYWORDAPP;
            case 23:
                return SADKEYWORDHOST;
            case 25:
                return URLBLOCK;
            case 100:
                return STATIS_SERVICE;
            case 101:
                return STATIS_USER_SERVICE;
            case 102:
                return STATIS_USER_NET_SERVICE;
            case 103:
                return STATIS_USERGRP_SERVICE;
            case 104:
                return STATIS_USERGRP_NET_SERVICE;
            case 105:
                return STATIS_NET_SERVICE;
            case 106:
                return STATIS_GUARANTEE;
            case 107:
                return STATIS_CTRL_USER_SERVICE;
            case 108:
                return STATIS_CTRL_USERGRP_SERVICE;
            case 109:
                return STATIS_CTRL_NET_SERVICE;
            case 110:
                return STATIS_CTRL_MTUPLE;
            case 111:
                return STATIS_CTRL_URL;
            case 112:
                return STATIS_GLOBAL;
            case 113:
                return STATIS_GLOBAL_PKT;
            case 114:
                return STATIS_TOS;
            case 115:
                return STATIS_PROTOCOL;
            case 116:
                return STATIS_ICMP;
            case 117:
                return STATIS_TCPFLAG;
            case 118:
                return STATIS_MPLSEXP;
            case 119:
                return STATIS_VPN;
            case 120:
                return STATIS_PKTLEN;
            case 121:
                return STATIS_LINK;
            case 122:
                return STATIS_CTRL_USERGRP;
            case 123:
                return STATIS_CTRL_NET;
            case 1001:
                return ISMSCOMMONDEVICEINFO;
            case 1002:
                return ISMSFLOWRPT;
            case 1003:
                return ISMSACCESSLOGMGR;
            case 1004:
                return ISMSHOUSE2IPLIST;
            case 1005:
                return ISMSPOLICY;
            case 1500:
                return DPIFLOWMIRPOLICY;
            default:
                return UNKNOWN;
        }
    }
}
